package com.example.behaviorpattern.visitor;

import java.util.function.Consumer;

/**
 * 元素接口 - 定义接受访问者的接口
 *
 * @author yaojianfeng
 */
public interface Element {
    /**
     * 元素对外提供接受访问者的访问
     * 具体的访问规则由具体的访问者来实现 元素本身并不关注具体的访问规则
     *
     * @param visitor 访问者
     */
    void accept(Visitor visitor);

    /**
     * 元素对外提供一个操作接口，用于对元素进行操作
     * 元素本身并不关注具体的操作规则，只需要提供一个操作接口，由调用者来决定具体的操作规则
     * @param consumer 操作接口
     */
    void operation(Consumer<Element> consumer);
}